package com.tedu.API.io;

import java.io.Serializable;
import java.util.Arrays;

/**
 * Person.java 类
 *
 * IO---高级流---针对传对象
 * Person.java对象具备如下功能:
 *    1.实现序列化接口   Serializable(序列化接口)---提供功能
 *      序列化接口: Person.java--JDK中虚拟机--转成Person.class【字节码文件】
 *                转换成二进制----序列化接口实现
 *    2.编写静态常量值: 版本号---项目升级或者降级
 *
 *
 *    对象输入流---对象输出流
 *    InvalidClassException  类转换版本号异常
 *    原因: 序列化或者反序列化操作，传输类--指定版本号--改Person.java
 *                                     【自动重新生成一个版本】
 *         serialVersionUID = -8941668120753023547   //name、say属性
 *         serialVersionUID = -4133405519555102790   //name、say、age属性
 *
 *   练习:1.对象输入流、对象输出流--实现为标准流
 *       2.Person 对象 实现 Serializable 删掉，测试对象输出流是否正常写出
 */
public class Person implements Serializable {
    /**
     * 版本号: 决定反序列化是否成功【字节、文件重新转换为对象】  唯一标识
     *        类实现Serializable接口，具备序列化功能，类自动生成版本号
     *        建议: 重写版本号
     *        每次增加或者减少代码，统一版本号，读入【反序列化成功】
     *        实现程序升级和降级操作
     * JavaBean: Java豆子---按照规范编写实体类
     */
    private static final long  serialVersionUID=3L;

    private String name; //私有属性
    private String[] say;

    public int age;

    //创建空参构造器
    public Person() {
    }

    //有参构造器
    public Person(String name, String[] say) {
        this.name = name;
        this.say = say;
    }

    //
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String[] getSay() {
        return say;
    }

    public void setSay(String[] say) {
        this.say = say;
    }

    // 重写: Object toString()  打印对象地址值  对象名@ERD2
    // 重写的目的: 不想看地址值，看对象的属性值
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", say=" + Arrays.toString(say) +
                '}';
    }
}
